package com.tansun.easycare.rule.common.model;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 用于解析规则集页面的内容的工具，记录当前操作信息，分析如下：
 * 1、操作区块分隔，所有情况记录如下
 * 	a·函数分割，调用摸一个函数，如:aaa("xxx","yyy");情况
 * 	b·逻辑判断分割, 与，或
 *  c.if判断区块
 *  d·for循环区块
 *  e·括号分组
 * 2、操作区之间可嵌套，使用出栈入栈方式存储，先进后出，
 * 3、记录数据，五种操作区的信息，各个操作区的的顺序关系
 * 4、构造函数解析页面信息，对其进行操作区分块
 * @author xuconghui
 *
 */
public class CurrentRecodes {
	
	public static void parseBlock(List<Map<String, String>> list) {
		List<Object> result = new ArrayList<Object>();
		List<Map<String, String>> first = new ArrayList<Map<String, String>>();
		for(int i=0;i<list.size();i++) {
			Map<String, String> each = list.get(i);
			System.out.println(""+i+" -- "+each);

			if(isStartLeftBrackets(each)) {//以左括号开始
				result.add(first);
				first = new ArrayList<Map<String, String>>();
				first.add(each);
			}else if(isEndRightBrackets(each)) {//以右括号结束
				first.add(each);
				result.add(first);
				first = new ArrayList<Map<String, String>>();
			}else if(isLogic(each)){
				result.add(first);
				first = new ArrayList<Map<String, String>>();
				first.add(each);
				result.add(first);
				first = new ArrayList<Map<String, String>>();
			}else {
				first.add(each);
			}
		}
	}

	/**
	 * 以左括号开始，已右括号结束
	 * @param each
	 */
	public static boolean isStartLeftBrackets(Map<String, String> each) {
		return "leftgroup".equals(each.get("handtype"))&&"grp".equals(each.get("type"))&&(!"coll".equals(each.get("widget")));
	}
	
	/**
	 * 以左括号开始，已右括号结束
	 * @param each
	 * @param type
	 * @return
	 */
	public static boolean isEndRightBrackets(Map<String, String> each) {
		return "rightgroup".equals(each.get("handtype"))&&"grp".equals(each.get("type"))&&(!"coll".equals(each.get("widget")));
	}

	/**
	 * 判断为逻辑运算符
	 * @return
	 */
	public static boolean isLogic(Map<String, String> each) {
		return "logi".equals(each.get("symtype"))&&"sym".equals(each.get("type"))&&"operator".equals(each.get("class"));
	}
}
